//
//  QSFMDataBaseTool.h
//  HYDClient
//
//  Created by apple on 16/10/25.
//  Copyright © 2016年 song. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface QSFMDataBaseTool : NSObject
/**
 *  单例对象
 */
+ (instancetype)databaseManager;

/**
 *  插入一条数据
 *
 *  @param object 数据模型
 *  @param formName 表单名称（可以传nil，默认以类名来创建表名）
 *  @return 插入是否成功
 */
- (BOOL)insertObjectToDatabaseWithObject:(id)object andFormName:(NSString *)formName;

/**
 *  修改数据
 *
 *  @param formName 表单名称（可以传nil，默认以类名来创建表名）
 *  @param changeColumnName 要修改的字段名
 *  @param changeToValue    要修改的字段数据
 *  @param whereColumnName  根据改字段来查询
 *  @param whereColumnValue 该查询字段的值
 *
 *  @return 修改是否成功
 */
- (BOOL)updateObjectToDatabaseWithFormName:(NSString *)formName whitchColumnChangeName:(NSString *)changeColumnName theColumnChangeToValue:(NSString *)changeToValue whereColumnName:(NSString *)whereColumnName andWhereColumnValue:(NSString *)whereColumnValue;

/**
 *  删除一条数据
 *
 *  @param formName 表单名称（可以传nil，默认以类名来创建表名）
 *  @param whereColumnName  根据该字段来查询
 *  @param whereColumnValue 该查询字段的值
 *
 *  @return 删除是否成功
 */
- (BOOL)deleteObjectFromDatabaseWithFormName:(NSString *)formName whereColumnName:(NSString *)whereColumnName andWhereColumnValue:(NSString *)whereColumnValue;

/**
 *  删除一条数据（根据多个字段）
 *
 *  @param formName 表单名称（可以传nil，默认以类名来创建表名）
 *  @param whereColumnNameA  根据该字段数组来查询
 *  @param whereColumnValueA 该查询字段数组的值
 *
 *  @return 删除是否成功
 */
- (BOOL)deleteObjectWithFormName:(NSString *)formName whereColumnName:(NSArray *)whereColumnNameA andWhereColumnValue:(NSArray *)whereColumnValueA;

/**
 *  删除最早添加的那条数据
 *
 *  @param formName 表单名称（可以传nil，默认以类名来创建表名）
 *  return 删除是否成功
 */
- (BOOL)deleteTheEarliestDataWithFormName:(NSString *)formName;

/**
 *  删除最早添加的数据(根据某个字段)
 *
 *  @param whereColumnName  根据该字段来查询
 *  @param whereColumnValue 该查询字段的值
 */
- (BOOL)deleteTheEarliestDataWithFormName:(NSString *)formName whereColumnName:(NSString *)whereColumnName andWhereColumnValue:(NSString *)whereColumnValue;

/**
 *  查询表中数据数量
 *
 *  @param formName 表单名称（可以传nil，默认以类名来创建表名）
 *  return 返回数据条数
 */
- (NSInteger)queryFormCountFromDatabaseWithFormName:(NSString *)formName;

/**
 *  查询所有的数据
 *
 *  @param cls 数据模型类（为了获取数据表名）
 *  @param formName 表单名称（可以传nil，默认以类名来创建表名）
 *  @return 查询到的数据数组
 */
- (NSArray *)queryAllObjectsFromDatabaseWithClass:(Class)cls andFormName:(NSString *)formName;

/**
 *  查询出符合条件的所有数据
 *
 *  @param cls 数据模型类（为了获取数据表名）
 *  @param formName 表单名称（可以传nil，默认以类名来创建表名）
 *  @param columnName 查询的字段名
 *  @param columnValue 要查询的值
 *  @return 查询到的数据数组
 */
- (NSArray *)queryObjectsFromDatabaseWithClass:(Class)cls formName:(NSString *)formName columnName:(NSString *)columnName andColumnValue:(NSString *)columnValue;

/**
 *  删除指定表的数据
 *
 *  @param formName 表单名称（可以传nil，默认以类名来创建表名）
 *  @return 删除是否成功
 */
- (BOOL)deleteAllObjectsFromDatabaseWithFormName:(NSString *)formName;
@end
